﻿using System.Runtime.InteropServices;
using EnvDTE;
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Shell.Interop;

namespace TellagoInc.VsTagExplorer
{
    ///<summary>
    ///  This class implements the tool window exposed by this package and hosts a user control.
    ///
    ///  In Visual Studio tool windows are composed of a frame (implemented by the shell) and a pane, 
    ///  usually implemented by the package implementer.
    ///
    ///  This class derives from the ToolWindowPane class provided from the MPF in order to use its 
    ///  implementation of the IVsUIElementPane interface.
    ///</summary>
    [Guid("118ccce5-a390-42ea-9fa4-3bed39579dc2")]
    public class TagExplorerToolWindow : ToolWindowPane
    {
        /// <summary>
        ///   Standard constructor for the tool window.
        /// </summary>
        public TagExplorerToolWindow() :
            base(null)
        {
            // Set the window title reading it from the resources.
            Caption = Resources.ToolWindowTitle;
            // Set the image that will appear on the tab of the window frame
            // when docked with an other window
            // The resource ID correspond to the one defined in the resx file
            // while the Index is the offset in the bitmap strip. Each image in
            // the strip being 16x16.
            BitmapResourceID = 302;
            BitmapIndex = 1;

            // This is the user control hosted by the tool window; Note that, even if this class implements IDisposable,
            // we are not calling Dispose on this object. This is because ToolWindowPane calls Dispose on 
            // the object returned by the Content property.

            var tagExplorer = new MyControl(GetService<DTE>(), GetService<SVsSolution>());

            base.Content = tagExplorer;
        }

        private static T GetService<T>() where T : class
        {
            return (T) ServiceProvider.GlobalProvider.GetService(typeof (T));
            //var componentModelService = (IComponentModel)ServiceProvider.GlobalProvider.GetService(typeof(SComponentModel));
            //return componentModelService.GetService<T>();
        }
    }
}